﻿namespace MicroCloud.Utils
{
    /// <summary>
    /// 组织机构身份
    /// </summary>
    public class OrganizationIdentity
    {
        /// <summary>
        /// 获取或设置 主键，唯一标识
        /// </summary>
        [DisplayName("编号")]
        public string Id { get; set; }

        /// <summary>
        /// 获取或设置 组织机构类型
        /// </summary>
        [DisplayName("组织机构类型")]
        public OrganizationType Type { get; set; }

        /// <summary>
        /// 获取或设置 组织机构名称
        /// </summary>
        [DisplayName("组织机构名称")]
        public string Name { get; set; }
    }

    /// <summary>
    /// 组织机构节点
    /// </summary>
    public class OrganizationNode : OrganizationIdentity
    {
        #region 属性
        /// <summary>
        /// 获取或设置 组织机构描述
        /// </summary>
        [DisplayName("组织机构描述")]
        public string Description { get; set; }

        /// <summary>
        /// 获取或设置 顺序编号
        /// </summary>
        [DisplayName("顺序编号")]
        public decimal OrderNo { get; set; }

        /// <summary>
        /// 获取或设置 节点树形路径
        /// <para>树链Id根据一定格式构建的字符串，形如："$1$,$3$,$4$,$7$"，编辑时更新。</para>
        /// </summary>
        [DisplayName("节点树形路径")]
        public string TreePathString { get; set; }

        /// <summary>
        /// 获取或设置 父组织机构编号
        /// </summary>
        [DisplayName("父组织机构编号")]
        public string ParentId { get; set; }

        /// <summary>
        /// 获取或设置 启用登陆
        /// </summary>
        [DisplayName("启用登陆")]
        public bool EnableLogin { set; get; }

        /// <summary>
        /// 获取或设置 是否默认组织机构
        /// <para>用户注册后拥有此组织机构</para>
        /// </summary>
        [DisplayName("是否默认组织机构")]
        public bool IsDefault { get; set; }

        /// <summary>
        /// 获取或设置 是否系统组织机构
        /// </summary>
        [DisplayName("是否系统组织机构")]
        public bool IsSystem { get; set; }

        /// <summary>
        /// 获取或设置 是否锁定当前信息
        /// </summary>
        [DisplayName("是否锁定")]
        public bool IsLocked { get; set; }
 
        /// <summary>
        /// 获取或设置 创建时间
        /// </summary>
        public DateTime CreatedTime { get; set; }

        /// <summary>
        /// 获取或设置 更新时间
        /// </summary>
        [DisplayName("更新时间")]
        public DateTime? UpdatedTime { get; set; }
  
        /// <summary>
        /// 获取 层级
        /// </summary>
        [DisplayName("层级")]
        public int Level { get { return TreePathString.IsMissing() ? -1 : TreePathString.Split(',').Length; } }

        #endregion
    }

    /// <summary>
    /// 组织机构树形节点
    /// </summary>
    public class OrganizationTreeNode : OrganizationNode
    {

        /// <summary>
        /// 获取 是否有子项
        /// </summary>
        public bool HasChildren => Items.Count > 0;

        /// <summary>
        /// 获取 子项集合
        /// </summary>
        public List<OrganizationTreeNode> Items { get; set; } = new();

    }
}